[C] - Les Fkeys Icons
Posté le 08/02/2015 00:16
Voila, un petit sujet pour présenter 2-3 petits trucs, même si ça n'est pas forcément ultra utile, y'avait pas trop de doc dessus en dehors de quelques succinctes lignes dans la doc de SimLo... Comme ça y'aura un peu plus de doc qui existera quelque part si quelqu'un utilise la fonction rechercher un jour là dessus ^^...
Même si la tendance actuelle est plutôt de commencer à essayer de se passer un maximum des syscalls de Casio, parfois leur utilisation peut il me semble s'avérer judicieuse, notamment lorsque l'on essaiera de faire un add-in "s'intégrant" bien à l'OS (c'est ce qu'on essaie de faire avec Eigenmath actuellement). L'exemple le plus significatif est peut être l'utilisation de GetKey qui permet de faire bien des choses qui sont en lien avec l'OS !
Ici je vais détailler un peu l'utilisation des syscalls permettant d'utiliser les "Fkeys icons" comme baptisés dans le doc de SimLo', c'est à dire les icônes qui s'affichent au dessus de chaque touche F1 à F6 dans la plupart des applications de Casio.
Comme ici par exemple.
Une fois n'est pas coutume, il y a des syscalls qui s'occupent et gèrent cet affichage.
Syscall n°0268 : GetFKeyIconPointer
Syscall n°04D1 : DisplayFKeyIcon
dont les prototypes sont les suivants :
void GetFKeyIconPointer( int FKeyNo, unsigned char** Bitmap );
void DisplayFKeyIcon( int FKeyPos, unsigned char* Bitmap );
Ils sont un peu différents de la doc de SimLo mais sont plus logiques pour moi comme ceci. Notez aussi qu'il existe un ou deux autres syscall liés à ces icônes, mais je n'ai pas encore eu à les utiliser, donc je ne saurais pas trop en parler pour l'instant ^^...
Le "point faible" de ces syscalls, c'est qu'il ne permettent pas d'afficher (directement) n'importe quoi, dans le sens où vous ne pouvez pas choisir d'afficher n'importe quelle chaîne de texte directement dans vos menus (enfin, si, mais c'est un peu plus compliqué). En fait de base, le système fonctionne avec des bitmaps qui sont intégrés à l'OS. C'est l'adresse de ceux-ci qui va être récupérée par GetFKeyIconPointer : en premier paramètre, elle prend l'ID de l'icône, et en second paramètre l'adresse d'un pointeur qui pointera vers le bitmap en question.
Le truc c'est qu'on avait pas trop de liste précise de l'ensemble des icônes associés à leur ID, du coup, j'avais un peu de temps ce soir et j'ai fait à l'aide d'un petit addin, une sorte de tableau récapitulatif de ce qui existe (du moins dans l'OS embarqué avec l'émulateur du SDK) (il est à "lire" de droite à gauche et de bas en haut si vous cherchez un ordre relatif dans les ID) :
L'ID de l'icône est au dessus de celui-ci.
Du coup il y en a un certain nombre c'est vrai (bon, j'avais un certain temps aussi) ^^, ce qui fait que cette image n'est pas des plus pratique pour en trouver un précis...
Du coup une fois l'adresse récupérée, il suffit d'appeler ensuite DisplayFKeyIcon où FKeyPos sera un nombre entre 0 et 5 désignant respectivement l'emplacement au dessus des touches F1 à F6, et Bitmap sera le pointeur vers le... bitmap récupéré plus tôt. Ainsi, par exemple, si je veux afficher "Solve" au dessus de la touche F4, je devrais faire :
unsigned char* solve;
GetFKeyIconPointer(0x00B8, &solve ); // On trouve 0x00B8 avec l'image plus haut.
DisplayFKeyIcon( 3, solve); // 3 correspond à la touche F4
C'est pas beaucoup plus compliqué que ça, il faut bien sûr ensuite rafraichir l'écran comme on en a l'habitude, et tout roule !
Ensuite, y'a deux trois petites pistes pour continuer ce "tuto" (si on peut appeler ça comme ça
), notamment celle qui permettrait d'afficher un peu n'importe quel texte, en sachant que les icônes font 8*19 pixels, il faut juste regarder comment ils sont codés, et on peut envoyer un bitmap "maison" à la fonction, donc ça doit rouler !
Voilà, donc à suivre, si vous avez des trucs à dire (suggestions - questions - insultes - informations diverses ...) n'hésitez pas !
Fichier joint
Citer : Posté le 08/02/2015 00:46 | #
Ouais, je trouve plus simple d'afficher des bitmaps qui copient les "Fkeys icons". On peut ainsi les personnaliser, et il n'y a aucun problème de compatibilité SH3 / SH4.
Escape prison
Bloxorz
Free wheel
QR code
Nombre en or
RayCasting Engine
Mario Party
Zelda
et Planète Casio
Citer : Posté le 08/02/2015 07:16 | #
Je sais pas comment tu as fais mais ça a l'air vachement bien
Citer : Posté le 08/02/2015 08:17 | #
Super nouvelle
Citer : Posté le 08/02/2015 10:36 | #
Donc à chaque fois que l'on appelle une des tes icones, ça appelle la fonction correspondante ?
Citer : Posté le 08/02/2015 10:40 | #
Ca permet juste d'afficher l'icone !
Escape prison
Bloxorz
Free wheel
QR code
Nombre en or
RayCasting Engine
Mario Party
Zelda
et Planète Casio
Citer : Posté le 08/02/2015 10:40 | #
ah ok dommage
Citer : Posté le 21/02/2015 19:23 | #
Petit up, je me demandais si c'etait compatible SH4 justement par rapport a ce qu'a dit Puro ?
Citer : Posté le 21/02/2015 19:40 | #
Je pense que oui, vu que c'est utilisé par l'OS, et qu'ils apparaissent bien dans les applications "officielles", à mon avis pas de soucis à ce niveau là.
Citer : Posté le 21/02/2015 19:53 | #
Sinon vous pouvez aussi utiliser cette fonction que j'avais trouver dans le code d'explorer :
void Mini(char* c, int n)
{
int i;
for(i=56 ; i<64 ; i++)
Bdisp_DrawLineVRAM(n*21+2, i, n*21+20, i);
if(strlen(c)<4) i=4;
else i=3;
PrintMini(n*21+i, 58, c, MINI_REV);
}
// Exemple :
Mini("OPTN",4); // Ecris 'OPTN' à la 4ème case ( 1 case = 1 place pour un Fkeys )
Citer : Posté le 21/02/2015 20:10 | #
Bof, c'est pas complet du tout.
Par exemple, en théorie une icône qui est un sous-menu est rognée sur le bord bas droite, alors qu'une fonction est un rectangle.
Et puis, PrintMini() peut tout à fait déborder si le libellé est trop long, et le cas échéant, ne permet pas d'utiliser des symboles.
Citer : Posté le 21/02/2015 20:22 | #
J'ai jamais dit que c'était compliqué.
J'ai juste donnée une solution alternative
Citer : Posté le 21/02/2015 20:28 | #
J'ai jamais dit que c'était compliqué.
Mais j'ai jamais écrit ça moi, j'ai dit que c'était pas complet pour une utilisation générale oO
Citer : Posté le 22/02/2015 11:37 | #
Dans mon tableau périodique v2 je me sert de Mini d'explorer
Citer : Posté le 07/03/2015 17:28 | #
C'est pas mal de pouvoir utiliser les FKeys, en effet ca rend mieux
Le seul soucis c'est qu'il faut chercher pendant 10 minutes dans le tableau le FKey